package controllers

import (
	"fmt"
	"ginvueadmin/global"
	"ginvueadmin/models/request"
	"ginvueadmin/models/response"
	"ginvueadmin/service"

	"github.com/gin-gonic/gin"
)

// 获取动态路由
func GetMenu(c *gin.Context) {
	/*
		1. 首先从请求的上下文中获取了名为 "claims" 的值
		2. 将其类型断言为 request.CustomClaims。这里的 "claims" 可能是从 JWT token 中解析出来的用户声明信息。如果类型断言失败，代码会产生运行时错误。
		3. 接着，函数调用了 service.GetMenuTree(waitUse.AuthorityId) 来获取菜单树。这里假设 service.GetMenuTree 是一个用于获取菜单树的业务逻辑函数，waitUse.AuthorityId 可能是当前用户的权限 ID 或者其他身份验证信息。
			a. 如果获取菜单树的过程中出现了错误（err != nil），函数会通过 global.FailWithMessage 返回一个包含错误信息的失败响应。
			b. 如果获取菜单树成功，函数会通过 global.OkWithData 返回一个包含菜单数据的成功响应。
	*/

	claims, _ := c.Get("claims")
	waitUse := claims.(*request.CustomClaims)
	menus, err := service.GetMenuTree(waitUse.AuthorityId)
	if err != nil {
		global.FailWithMessage(fmt.Sprintf("获取失败, %v", err), c)
	} else {
		global.OkWithData(response.SysMenusResponse{Menus: menus}, c)
	}
}
